package modelo;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;


import javax.swing.ImageIcon;

public class Ventana extends Frame implements SuperficieDeDibujo{

private static final long serialVersionUID = 1L;
	
	private ControladorJuego controlador;
	
	public Ventana(ControladorJuego unControlador) {
		this.controlador = unControlador;
		//this.addMouseListener((MouseListener) new MouseClickController(this.controlador));
		this.addKeyListener(new KeyController(this.controlador));
	}
	
	// es llamado internamente por el metodo repaint() de la clase Frame
	public void update(Graphics g) {
		paint(g);
	}


	/* 
	 *Esta es la imagen en que se realiza todo el dibujo utilizando la tecnica
	 *de doble buffering.
	 */
    private BufferedImage imagen;
    
	public void paint(Graphics g) {
		g.drawImage(this.imagen, 4, 36, null);
	}
	
	
	
	public void mostrarImagen (String archImagen, int x, int y) {
		Image imagen = Toolkit.getDefaultToolkit().createImage(archImagen);
		//new ImageIcon(imagen);
		Image escalada = imagen.getScaledInstance((getSize().width-100), getSize().height, Image.SCALE_SMOOTH);
		new ImageIcon(escalada);
		this.imagen.getGraphics().drawImage(escalada, x, y, null);
	}
	
	public void limpiar() {
		if(this.imagen == null)
			this.imagen = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_RGB);
		Graphics superficieParaDibujar =  this.imagen.getGraphics();
		superficieParaDibujar.setColor(Color.gray);
		superficieParaDibujar.fillRect(0, 0, this.getSize().width, this.getSize().height);		
	}

	public Graphics getGrafico() {
		if(imagen == null) limpiar();
		return imagen.getGraphics();
	}
	
	public void actualizar() {
		this.repaint();
	}
	
	public Ventana (int ancho, int alto, ControladorJuego unControlador) {
		this(unControlador);
		setSize(ancho+8, alto+20);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = getSize();
		int x = (screenSize.width - frameSize.width) / 2;
		int y = (screenSize.height - frameSize.height) / 2;
		setLocation(x, y);
		setResizable(false);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				dispose();
				System.exit(0);
			}
		});
	}
	
}
